﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using DAO;

namespace BUS
{
    public class Q_BUSChi
    {
        /// <summary>
        /// Lấy danh sách chi tiêu theo ngày
        /// </summary>
        /// <param name="ngay">Ngày cần lấy danh sách</param>
        /// <returns></returns>
        public List<Chi> DanhSachChiTheoNgay(DateTime ngay)
        {
            Q_DAOChi DAOChi = new Q_DAOChi();
            return DAOChi.DanhSachChiTheoNgay(ngay);
        }
        /// <summary>
        /// Thêm phiếu chi mới
        /// </summary>
        /// <param name="chi">Phiếu chi mới</param>
        public void ThemPhieuChi(Chi chi)
        {
            Q_DAOChi DAOchi = new Q_DAOChi();
            if (chi.so_tien_chi > 0)
            {
                try
                {
                    DAOchi.ThemPhieuChi(chi);
                }
                catch (Exception)
                {
                    throw new Exception("E_Chi_001: Không thể thêm phiếu chi.");
                }
            }
            else
            {
                throw new Exception("E_Chi_002: Số tiền chi phải lớn hơn 0 VNĐ.");
            }
        }
        /// <summary>
        /// Xoá phiếu chi
        /// </summary>
        /// <param name="id">Id của phiếu chi</param>
        public void XoaPhieuChi(int id)
        {
            Q_DAOChi DAOchi = new Q_DAOChi();
            try
            {
                DAOchi.XoaPhieuChi(id);
            }
            catch (Exception )
            {
                throw new Exception("E_Chi_002: Không xoá được phiếu chi.");
            }
        }
        /// <summary>
        /// Lấy danh sách chi theo tháng
        /// </summary>
        /// <param name="Thang">Tháng chi</param>
        /// <param name="Nam">Năm của tháng chi</param>
        /// <returns></returns>
        public List<ChiTheoThang> dsChiTheoThang(int Thang, int Nam)
        {
            Q_DAOChi DAOchi = new Q_DAOChi();
            return DAOchi.dsChiTheoThang(Thang, Nam);
        }

        /// <summary>
        /// Kiểm tra tháng chi có tồn tại trong csdl
        /// </summary>
        /// <param name="ds">Danh sách chi của năm</param>
        /// <param name="Thang">Tháng kiểm tra</param>
        /// <returns></returns>
        private bool KiemTraThangChiTonTai(int Thang, List<ChiTheoNam> ds)
        {
            for (int i = 0; i < ds.Count; i++)
            {
                if (Thang == ds[i].Thang)
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// Thống kê chi theo năm
        /// </summary>
        /// <param name="Nam">Năm thống kê</param>
        /// <returns></returns>
        public List<ChiTheoNam> dsChiTheoNam(int Nam)
        {
            List<ChiTheoNam> dsChiNam = null, dsResult = null;
            Q_DAOChi DAOchi = new Q_DAOChi();
            dsResult = DAOchi.dsChiTheoNam(Nam);
            dsChiNam = new List<ChiTheoNam>();
            int index = 0;
            for (int i = 1; i <= 12; i++)
            {
                if (KiemTraThangChiTonTai(i, dsResult))
                {
                    dsChiNam.Add(new ChiTheoNam() { Thang = i, TongTien = dsResult[index].TongTien });
                    index++;
                }
                else dsChiNam.Add(new ChiTheoNam() { Thang = i, TongTien = 0 });
            }
            return dsChiNam;
        }
    }
}
